//
//  YZXEmojiManager.swift
//  表情键盘
//
//  Created by 叶周翔 on 16/7/29.
//  Copyright © 2016年 叶周翔. All rights reserved.
//

import UIKit

class YZXEmojiManager: NSObject {
     let bundlePath = NSBundle.mainBundle().pathForResource("Emoticons", ofType: "bundle")!
    /// 最近表情模型归档的路径
    private let recentEmoticonPath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).last! + "/recentEmoticon.plist"
    
   
    
    /// 单例
    static var shareManager:YZXEmojiManager = YZXEmojiManager()
    
    lazy var emojticonPackages: [YZXEmoticoPackModel] = self.loadEmoticonPackages()
    
    private func loadEmoticonPackages() -> [YZXEmoticoPackModel] {
        
        // 加载最近的表情
        let recentEmoticons = loadRecentEmoticons()
        let recentPage = YZXEmoticoPackModel(id: "", group_name_cn: "最近", emoticons: recentEmoticons)
        
        // 默认
        let defaultEmoji = loadEmoticonPackage("com.sina.default")
        // emoji
        let emojiPack = loadEmoticonPackage("com.apple.emoji")
        //浪小花
        let lxhEmoji = loadEmoticonPackage("com.sina.lxh")
        return [recentPage,defaultEmoji,emojiPack,lxhEmoji]
    }
    
    private func loadEmoticonPackage(id:String) -> YZXEmoticoPackModel{
       
        let infoPath = bundlePath + "/" + id + "/info.plist"
        let dict = NSDictionary(contentsOfFile: infoPath)!
        
        let group_name_cn = dict["group_name_cn"] as! String
        let emoticonsArray = dict["emoticons"] as! [[String: String]]
        
        
        var emoticonsModels = [YZXEmoticonModel]()
        
        for dict in emoticonsArray {
            let emoticonsModel = YZXEmoticonModel(id:id, dict: dict)
            emoticonsModels.append(emoticonsModel)
        }
        
        // 返回表情包的模型
        return YZXEmoticoPackModel(id: id, group_name_cn: group_name_cn, emoticons: emoticonsModels)
    }
    
    
    //MARK:- 添加表情包到最近的cell中
    func addRecentEmoji(emoticonModel:YZXEmoticonModel) {
        // 找到最近表情包 找到对应的那一页表情数据
        var recentEmoticons = emojticonPackages[0].allPageEmoji[0]
        // 记录重复的表情
        var repeatEmoticon: YZXEmoticonModel?
        
        // 判断最近里面是否已经存在表情
        for emoticon in recentEmoticons {
            // 记录重复的表情
            if emoticon.emoji != nil && emoticon.emoji == emoticonModel.emoji {
                repeatEmoticon = emoticon
                break
            }
            // 如果是图片的表情重复记录下来
            if emoticon.png != nil && emoticon.png == emoticonModel.png {
                repeatEmoticon = emoticon
                break
            }
        }
            // 如果有重复的表情那么就删除重复的表情
            if let reEmoticon = repeatEmoticon {
                // 根据模型查看在数组中的位置
                let index = recentEmoticons.indexOf(reEmoticon)!
                // 删除数组中的这个重复的表情
                recentEmoticons.removeAtIndex(index)
            }
            // 如果没有重复的表情那么久将表情模型添加到最前一个
            recentEmoticons.insert(emoticonModel, atIndex: 0)
            
            // 因为每一个cell中只能存放20个表情 所以添加多的时候要删除最后一个
            if recentEmoticons.count > 20 {
                recentEmoticons.removeLast()
            }
            
            // 但是在swift中 recentEmoticons 只是表示一个数组 不是一个指针 是没有和 emojticonPackages[0].allPageEmoji[0] 指向同一块地址的 所以需要重新赋值
            emojticonPackages[0].allPageEmoji[0] = recentEmoticons
        
            saveRecentEmoticons()
    }
    /**
     *  保存最近表情
     */
    func saveRecentEmoticons() {
        // 使用归档来保存
        NSKeyedArchiver.archiveRootObject(emojticonPackages[0].allPageEmoji[0], toFile: recentEmoticonPath)
    }
    /**
    *  加载最近表情
    */
    private func loadRecentEmoticons() -> [YZXEmoticonModel] {
        
        if let recentEmoticons = NSKeyedUnarchiver.unarchiveObjectWithFile(recentEmoticonPath) as? [YZXEmoticonModel] {
            return recentEmoticons
        }else{
            let emptyEmoticons = [YZXEmoticonModel]()
            return emptyEmoticons
        }
        
    }
}
